// PART OF THE MACHINE SIMULATION. DO NOT CHANGE.

package nachos.machine;

/**
 * A file system that allows the user to create, open, and delete files.
 */
public interface FileSystem {
	/**
	 * Atomically open a file, optionally creating it if it does not already
	 * exist. If the file does not already exist and <tt>create</tt> is
	 * <tt>false</tt>, returns <tt>null</tt>. If the file does not already exist
	 * and <tt>create</tt> is <tt>true</tt>, creates the file with zero length.
	 * If the file already exists, opens the file without changing it in any
	 * way.
	 * 
	 * @param name
	 *            the name of the file to open.
	 * @param create
	 *            <tt>true</tt> to create the file if it does not already exist.
	 * @return an <tt>OpenFile</tt> representing a new instance of the opened
	 *         file, or <tt>null</tt> if the file could not be opened.
	 */
	public OpenFile open(String name, boolean create);

	/**
	 * Atomically remove an existing file. After a file is removed, it cannot be
	 * opened until it is created again with <tt>open</tt>. If the file is
	 * already open, it is up to the implementation to decide whether the file
	 * can still be accessed or if it is deleted immediately.
	 * 
	 * @param name
	 *            the name of the file to remove.
	 * @return <tt>true</tt> if the file was successfully removed.
	 */
	public boolean remove(String name);
}
